package com.easypan.annotation;

import com.easypan.entity.enums.VerifyRegexEnum;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @author Yandel
 * @date 2025/6/4 下午9:51
 * @description: 自定义检查参数注解
 *
 * 注解类型：
 * 1、源码级别注解，仅存在源码中，编译后不会保留 @Retention(RetentionPolicy.SOURCE)
 * 2、类级别注解，存在源码中，编译后保留，但运行时不可见 @Retention(RetentionPolicy.CLASS)
 * 3、运行时注解，存在源码中，编译后保留，运行时也可见 @Retention(RetentionPolicy.RUNTIME)
 *
 *
 *
 * java注解作用域：【以下为常用】
 *  1、ElementType.TYPE：类、接口、枚举
 *  2、ElementType.FIELD：字段、属性
 *  3、ElementType.METHOD：方法
 *  4、ElementType.CONSTRUCTOR：构造方法
 */
@Retention(RetentionPolicy.RUNTIME)//注解类型
@Target({ElementType.PARAMETER,ElementType.FIELD})//指明作用域
public @interface VerifyParam {
    /**
     * 校验正则
     *
     * @return
     */
    VerifyRegexEnum regex() default VerifyRegexEnum.NO;
    /**
     * 最小长度
     *
     * @return
     */
    int min() default -1;

    /**
     * 最大长度
     *
     * @return
     */
    int max() default -1;

    /**
     * 是否必填
     *
     * @return
     */
    boolean required() default false;
}
